package com.edu.flying_birds;

import sun.net.www.content.image.png;

import java.awt.image.BufferedImage;
import java.io.IOException;

/**
 * @PackageName: com.edu.flying_birds
 * @ClassName: Bird
 * @Description: 创建小鸟类
 * @author: RZS
 * @date: 2021/6/18  16:09
 */
public class Bird {
    // 定义小鸟的x, y坐标
    public int x;
    public int y;
    // 定义小鸟的宽度和高度
    public int width;
    public int height;
    // 定义小鸟图片的变量
    public BufferedImage img;
    // 定义小鸟图片组
    BufferedImage[] imgs = new BufferedImage[8];
    // 定义小鸟往上飞的初速度
    public double v0;
    // 定义小鸟上飞的时间
    public double t;
    // 定义小鸟每次上飞的距离
    public double s;
    // 定义加速度
    public double g;
    // 定义柱子空隙距离
    public int gap = 75;

    public Bird() {
        try {
            init();
        } catch (IOException e) {
            System.out.println("初始化小鸟失败");
            e.printStackTrace();
        }
    }

    /**
     * 初始化方法
     */
    private void init() throws IOException {
        x = 142;
        y = 276;
        img = ImgUtils.getImg("../img/0.png");
        width = img.getWidth() / 2;
        height = img.getHeight() / 2;
        
        // 读取小鸟图片组  imgs.length.for
        for (int i = 0; i < imgs.length; i++) {
            imgs[i] = ImgUtils.getImg("../img/"+i+".png ");
        }

        // 初始化小鸟运动数据
        v0 = 3;
        t = 0.2;
        s = 2;
        g = 9;
    }

    /**
     * 判断小鸟是否与柱子相撞
     * @return
     */
    public boolean pillar(Column column){
        // 判断小鸟是否与柱子左边相撞
        boolean bool1 = x+width < column.x;
        // 判断小鸟是否与柱子右侧相撞
        boolean bool2 = column.x+column.width < x;
        // 判断小鸟是否与柱子空隙上边缘相撞
        boolean bool3 = y > (column.height/2 + column.y - gap/2);
        // 判断小鸟是否与柱子空隙下边缘相撞
        boolean bool4 = (y + height) < (column.height/2 + column.y - gap/2 +gap);
        if(bool1 || bool2 || (bool3 && bool4)){
            //没有相撞
            return false;
        }
        // 与柱子相撞了
        return true;
    }

    /**
     * 判断小鸟是否落到地面
     * @return
     */
    public boolean strike(){
        // 判断地面的y坐标与小鸟的Y坐标+小鸟高度
        if(new Ground().y > y+height){
            // 小鸟没有与地面相撞
            return false;
        }
        // 小鸟与地面相撞了
        return true;
    }

    /**
     * 小鸟往上飞
     */
    public void moveUp(){
        v0 = 20;
    }

    /**
     * 小鸟下落
     */
    public void moveDown(){
        // 计算小鸟上飞的距离
        s = v0 * t;
        // 计算小鸟到达最高点时的Y坐标
        y = (int)(y - s);
        // 计算小鸟到达最高点的速度
        double v1 = v0 - g*t;
        // 将小鸟到达最高点的速度作为小鸟下落的初速度
        v0 = v1;
    }

    /**
     * 让小鸟的翅膀动起来
     */
    int index = 0;
    public void flying(){
        if(index >= imgs.length-1){
            index = 0;
        }
        img = imgs[index];
        index++;
    }
}
